import java.sql.Connection;    
import java.sql.DriverManager;    
import java.sql.ResultSet;    
import java.sql.ResultSetMetaData;
import java.sql.SQLException;    
import java.sql.Statement;    
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
    
public class DBConnection {    
    // 创建静态全局变量     
    static Connection conn;

	/**
	 * @Fields PROPERTIES_NAME : 资源配置文件的名称
	 */
	private static String PROPERTIES_NAME = "jdbc";

	private static PropertyResourceBundle properTyResourceBundle;
	static {
		properTyResourceBundle = (PropertyResourceBundle) ResourceBundle.getBundle(PROPERTIES_NAME);
	}
    static Statement st;
    public static void main(String[] args) {
		DBConnection.getConnection();
	}

	// private static String url="jdbc:oracle:thin:@10.156.1.69:1521:lisst1";
	// private static String user="lisquery";
	// private static String password="lisquery";
	// private static String url="jdbc:oracle:thin:@10.156.3.77:1521:lisst2";
	// private static String user="LIS_EB";
	// private static String password="lisst";
	// private static String url="jdbc:oracle:thin:@10.156.4.21:1521:lisst1";
	// private static String user="LIS_EB";
	// private static String password="LIS_EB";
	// private static String url="jdbc:oracle:thin:@10.156.10.55:1521:lispr2";
	// private static String user="LIS_EB";
	// private static String password="szpzc123";
	// private static String url="jdbc:oracle:thin:@10.156.3.241:1521:emtest";
	// private static String user="ebusiness";
	// private static String password="passw0rd";
	// private static String url = "jdbc:oracle:thin:@10.156.8.154:1521:emtest";
	// private static String user = "etest";
	// private static String password = "etest";
	//	 private static String url = "jdbc:oracle:thin:@10.156.3.113:1521:emtest1";
	//	 private static String user = "echannel";
	//	 private static String password = "passw0rd";
	 private static String url = properTyResourceBundle.getString("jdbc.url");
	 private static String user = properTyResourceBundle.getString("jdbc.username");
	 private static String password = properTyResourceBundle.getString("jdbc.password");
	 
	/* 执行增删改表 */
	@SuppressWarnings("rawtypes")
	public void controllerTable(List list) throws SQLException {
		conn = getConnection(url, user, password); // 同样先要获取连接，即连接到数据库
		conn.setAutoCommit(false);
		st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); // 创建用于执行静态sql语句的Statement对象，st属局部变量
		for (int i = 0; i < list.size(); i++) {
			st.execute(list.get(i).toString());
			if(i % 10000 == 0){
				conn.commit();
			}
		}
		conn.commit();
	}

	/* 执行增删改表 */
	public boolean controllerTable(String sql) throws SQLException {
		conn = getConnection(url, user, password); // 同样先要获取连接，即连接到数据库
		st = conn.createStatement(); // 创建用于执行静态sql语句的Statement对象，st属局部变量
		int f = st.executeUpdate(sql); // 执行sql查询语句，返回查询数据的结果集
		if (f >= 1) {
			return true;
		} else {
			return false;
		}
	}
	/* 查询数据库，输出符合要求的记录的情况 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public List queryForList(String sql, String url, String user,
			String password) throws SQLException {
		conn = getConnection(url, user, password); // 同样先要获取连接，即连接到数据库
		List list = new ArrayList();
		st = (Statement) conn.createStatement(); // 创建用于执行静态sql语句的Statement对象，st属局部变量
		ResultSet rs = st.executeQuery(sql); // 执行sql查询语句，返回查询数据的结果集
		ResultSetMetaData md = rs.getMetaData(); // 获得结果集的表结构
		int columnCount = md.getColumnCount();// 取出总列数
		while (rs.next()) { // 判断是否还有下一个数据
			Map map = new HashMap();
			for (int i = 1; i <= columnCount; i++) {
				String key = md.getColumnName(i);// 获取表结构字段名
				Object value = rs.getObject(i);// 获取结果集数据
				map.put(key, value);
			}
			list.add(map);
		}
		conn.close(); // 关闭数据库连接

		return list;
	}

	/* 获取数据库连接的函数 */
	public Connection getConnection(String url, String user, String password) {
		Connection con = null; // 创建用于连接数据库的Connection对象
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");// 加载Mysql数据驱动

			con = DriverManager.getConnection(url, user, password);// 创建数据连接

		} catch (Exception e) {
			e.printStackTrace();
		}
		return con; // 返回所建立的数据库连接
	}

	/* 查询数据库，输出符合要求的记录的情况 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public List queryForList(String sql) throws SQLException {
		conn = getConnection(url, user, password); // 同样先要获取连接，即连接到数据库
		List list = new ArrayList();
		st = (Statement) conn.createStatement(); // 创建用于执行静态sql语句的Statement对象，st属局部变量
		ResultSet rs = st.executeQuery(sql); // 执行sql查询语句，返回查询数据的结果集
		ResultSetMetaData md = rs.getMetaData(); // 获得结果集的表结构
		int columnCount = md.getColumnCount();// 取出总列数
		while (rs.next()) { // 判断是否还有下一个数据
			Map map = new HashMap();
			for (int i = 1; i <= columnCount; i++) {
				String key = md.getColumnName(i);// 获取表结构字段名
				Object value = rs.getObject(i);// 获取结果集数据
				map.put(key, value);
			}
			list.add(map);
		}
		conn.close(); // 关闭数据库连接

		return list;
	}

	/* 获取数据库连接的函数 */
	public static Connection getConnection() {
		Connection con = null; // 创建用于连接数据库的Connection对象
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");// 加载Mysql数据驱动

			con = DriverManager.getConnection(url, user, password);// 创建数据连接
			System.out.println("数据库连接成功");
		} catch (Exception e) {
			System.out.println("数据库连接失败" + e.getMessage());
		}
		return con; // 返回所建立的数据库连接
	}
}    